home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Toolbox / Visual Basic Toolbox (P.I.E.)(1996).ISO / printing / prtpik / duini.bas next >
BASIC Source File  |  1994-11-09  |  8KB  |  222 lines

  1. Option Explicit
  2.  
  3. Const HWND_BROADCAST = &HFFFF
  4. Const WM_WININICHANGE = &H1A
  5.  
  6. Declare Function duini_nGetWindowsDirectory Lib "Kernel" Alias "GetWindowsDirectory" (ByVal lpDirName As String, ByVal nSize As Integer) As Integer
  7.  
  8. Declare Function duini_nWriteProfileString Lib "Kernel" Alias "WriteProfileString" (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpString As String) As Integer
  9. Declare Function duini_nWritePrivateProfileString Lib "Kernel" Alias "WritePrivateProfileString" (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Integer
  10.  
  11. Declare Function duini_nGetProfileString Lib "Kernel" Alias "GetProfileString" (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Integer) As Integer
  12. Declare Function duini_nGetPrivateProfileString Lib "Kernel" Alias "GetPrivateProfileString" (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Integer, ByVal lpFileName As String) As Integer
  13. Declare Function duini_nGetProfileKeys Lib "Kernel" Alias "GetProfileString" (ByVal lpAppName As String, ByVal lpKeyName As Long, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Integer) As Integer
  14. Declare Function duini_nGetPrivateProfileKeys Lib "Kernel" Alias "GetPrivateProfileString" (ByVal lpAppName As String, ByVal lpKeyName As Long, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Integer, ByVal lpFileName As String) As Integer
  15.  
  16. Declare Function duini_nDeleteProfileKey Lib "Kernel" Alias "WriteProfileString" (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpString As Long) As Integer
  17. Declare Function duini_nDeletePrivateProfileKey Lib "Kernel" Alias "WritePrivateProfileString" (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpString As Long, ByVal lpFileName As String) As Integer
  18. Declare Function duini_nDeleteProfileSection Lib "Kernel" Alias "WriteProfileString" (ByVal lpAppName As String, ByVal lpKeyName As Long, ByVal lpString As Long) As Integer
  19. Declare Function duini_nDeletePrivateProfileSection Lib "Kernel" Alias "WritePrivateProfileString" (ByVal lpAppName As String, ByVal lpKeyName As Long, ByVal lpString As Long, ByVal lpFileName As String) As Integer
  20.  
  21. Declare Function duini_nBroadcastWININIChange Lib "User" Alias "PostMessage" (ByVal hWnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As String) As Integer
  22.  
  23. Sub duini_DeleteKey (sSectionName As String, sKeyName As String, sProfileName As String)
  24.  
  25. 'This routine removes a keyname, and its associated value.
  26.  
  27. Dim nRC As Integer
  28.  
  29.  
  30. If Trim$(sProfileName) = "" Then
  31.    nRC = duini_nDeleteProfileKey(sSectionName, sKeyName, 0)
  32. Else
  33.    nRC = duini_nDeletePrivateProfileKey(sSectionName, sKeyName, 0, sProfileName)
  34. End If
  35.  
  36. End Sub
  37.  
  38. Sub duini_DeleteSection (sSectionName As String, sProfileName As String)
  39.  
  40. 'This routine removes an entire section.  All keynames
  41. 'and their associated values are deleted.
  42.  
  43. Dim nRC As Integer
  44.  
  45.  
  46. If Trim$(sProfileName) = "" Then
  47.    nRC = duini_nDeleteProfileSection(sSectionName, 0, 0)
  48. Else
  49.    nRC = duini_nDeletePrivateProfileSection(sSectionName, 0, 0, sProfileName)
  50. End If
  51.  
  52. End Sub
  53.  
  54. Sub duini_GetKeyNames (sSectionName As String, sKeyNames() As String, sProfileName As String)
  55.  
  56. 'This routine enumerates all the keynames present in a
  57. 'given section.
  58.  
  59. Dim nStrPos As Integer, nKeyCount As Integer, nStart As Integer
  60. Dim nKeyNamesLength As Integer
  61. Dim sKeyNameString As String
  62.  
  63.  
  64. sKeyNameString = Space$(1024)
  65.  
  66. If Trim$(sProfileName) = "" Then
  67.    nKeyNamesLength = duini_nGetProfileKeys(sSectionName, 0, "", sKeyNameString, Len(sKeyNameString))
  68. Else
  69.    nKeyNamesLength = duini_nGetPrivateProfileKeys(sSectionName, 0, "", sKeyNameString, Len(sKeyNameString), sProfileName)
  70. End If
  71.  
  72. nKeyCount = 0
  73. ReDim sKeyNames(0)
  74.  
  75. If nKeyNamesLength > 0 Then
  76.    sKeyNameString = Left$(sKeyNameString, nKeyNamesLength)
  77.  
  78.    If Right$(sKeyNameString, 1) <> Chr$(0) Then
  79.       sKeyNameString = sKeyNameString + Chr$(0)
  80.    End If
  81.  
  82.    nKeyNamesLength = Len(sKeyNameString)
  83.    nStart = 1
  84.    Do
  85.       nStrPos = InStr(nStart, sKeyNameString, Chr$(0))
  86.  
  87.       If nStrPos > 0 Then
  88.          nKeyCount = nKeyCount + 1
  89.          ReDim Preserve sKeyNames(nKeyCount)
  90.          sKeyNames(nKeyCount) = Mid$(sKeyNameString, nStart, nStrPos - nStart)
  91.  
  92.          If nStrPos < nKeyNamesLength Then
  93.             nStart = nStrPos + 1
  94.          Else
  95.             Exit Do
  96.          End If
  97.       Else
  98.          Exit Do
  99.       End If
  100.    Loop
  101. End If
  102.  
  103. End Sub
  104.  
  105. Sub duini_GetSectionNames (sSectionNames() As String, sProfileName As String)
  106.  
  107. 'This routine enumerates all the sections present in a
  108. 'given .INI file.
  109.  
  110. Dim nProfileNameHandle As Integer, nSectionCount As Integer
  111. Dim nDirLength As Integer
  112. Dim sProfileRecord As String, sWindowsDir As String
  113. Dim sProfileSpec As String
  114.  
  115.  
  116. On Error GoTo duini_GetSectionNames_Err
  117.  
  118. sWindowsDir = Space$(256)
  119. nDirLength = duini_nGetWindowsDirectory(sWindowsDir, Len(sWindowsDir))
  120. sWindowsDir = Left$(sWindowsDir, nDirLength)
  121.  
  122. nProfileNameHandle = FreeFile
  123.  
  124. If Trim$(sProfileName) = "" Then
  125.    sProfileSpec = sWindowsDir + "\WIN.INI"
  126. Else
  127.    If InStr(sProfileName, ":") Or InStr(sProfileName, "\") Then
  128.       sProfileSpec = sProfileName
  129.    Else
  130.       sProfileSpec = sWindowsDir + "\" + sProfileName
  131.    End If
  132. End If
  133.  
  134. Open sProfileSpec For Input As #nProfileNameHandle
  135.  
  136. nSectionCount = 0
  137. ReDim sSectionNames(0)
  138.  
  139. While Not EOF(nProfileNameHandle)
  140.    Line Input #nProfileNameHandle, sProfileRecord
  141.    sProfileRecord = Trim$(sProfileRecord)
  142.  
  143.    If Len(sProfileRecord) >= 3 Then
  144.       If Left$(sProfileRecord, 1) = "[" Then
  145.          If Right$(sProfileRecord, 1) = "]" Then
  146.             nSectionCount = nSectionCount + 1
  147.             ReDim Preserve sSectionNames(nSectionCount)
  148.             sSectionNames(nSectionCount) = Mid$(sProfileRecord, 2, Len(sProfileRecord) - 2)
  149.          End If
  150.       End If
  151.    End If
  152. Wend
  153.  
  154. '==========================
  155. duini_GetSectionNames_Exit:
  156. '==========================
  157. Close #nProfileNameHandle
  158.  
  159. Exit Sub
  160.  
  161. '=========================
  162. duini_GetSectionNames_Err:
  163. '=========================
  164. ReDim sSectionNames(0)
  165. Resume duini_GetSectionNames_Exit
  166.  
  167. End Sub
  168.  
  169. Function duini_sGetString (sSectionName As String, sKeyName As String, sDefaultValue As String, sProfileName As String) As String
  170.  
  171. 'This function returns the value associated with a given
  172. 'keyname, within a given section.  If either the keyname,
  173. 'the section, or the .INI file itself is not present,
  174. 'the "default" value is returned instead.
  175.  
  176. Dim nKeyValueLength As Integer
  177. Dim sKeyValue As String
  178.  
  179.  
  180. sKeyValue = Space$(256)
  181.  
  182. If Trim$(sProfileName) = "" Then
  183.    nKeyValueLength = duini_nGetProfileString(sSectionName, sKeyName, sDefaultValue, sKeyValue, Len(sKeyValue))
  184. Else
  185.    nKeyValueLength = duini_nGetPrivateProfileString(sSectionName, sKeyName, sDefaultValue, sKeyValue, Len(sKeyValue), sProfileName)
  186. End If
  187.  
  188. duini_sGetString = Left$(sKeyValue, nKeyValueLength)
  189.  
  190. End Function
  191.  
  192. Sub duini_WININIChange (sSectionName As String)
  193.  
  194. 'This routine notifies all running tasks of a change
  195. 'to a WIN.INI setting.
  196.  
  197. Dim nRC As Integer
  198.  
  199.  
  200. nRC = duini_nBroadcastWININIChange(HWND_BROADCAST, WM_WININICHANGE, 0, sSectionName)
  201.  
  202. End Sub
  203.  
  204. Sub duini_WriteString (sSectionName As String, sKeyName As String, sKeyValue As String, sProfileName As String)
  205.  
  206. 'This routine updates the value associated with a given
  207. 'keyname, within a given section.  If either the keyname,
  208. 'the section, or the .INI file itself is not present,
  209. 'they are created.
  210.  
  211. Dim nRC As Integer
  212.  
  213.  
  214. If Trim$(sProfileName) = "" Then
  215.    nRC = duini_nWriteProfileString(sSectionName, sKeyName, sKeyValue)
  216. Else
  217.    nRC = duini_nWritePrivateProfileString(sSectionName, sKeyName, sKeyValue, sProfileName)
  218. End If
  219.  
  220. End Sub
  221.  
  222.